home *** CD-ROM | disk | FTP | other *** search
/ Risc World 3 / Risc World 3.iso / SOFTWARE / ISSUE2 / FASTERPC / !FASTERPC / !CONFIG / !RUNIMAGE (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  2002-03-09  |  16KB  |  686 lines

  1.    ><Config$Dir>.!RunImage
  2.    FasterPC configuration utility.
  3.    Copyright 
  4.  Darren Sillett, 1993.
  5.    Modifications David Lawrence, 1993.
  6.    Version 1.10
  7.    Floppy status characters
  8.    X : Doesn't exist
  9.    3 : 3
  10. " drive
  11.    5 : 5
  12. " drive
  13. initialise
  14. error
  15.  "Wimp_Poll",wimp_mask%,wimp_block% 
  16.  result%
  17.  result% 
  18. 3    
  19.  2     : 
  20.  "Wimp_OpenWindow",,wimp_block%
  21. 4    
  22.  3     : 
  23.  "Wimp_CloseWindow",,wimp_block%
  24. "                 finished% = 
  25. -    
  26.  6     : 
  27. mouse_click(wimp_block%!8)
  28.      
  29.  7     : 
  30. user_drag_box
  31. :    
  32.  8     : 
  33. key_press(wimp_block%!4,wimp_block%!24)
  34.  9     : 
  35. menu_select
  36. 2    
  37.  17,18 : 
  38. receive_message(wimp_block%!16)
  39.  finished%
  40. closedown_wimp(task_id%)
  41. initialise
  42.  buffer% 100
  43.   finished% = 
  44. #5  task_id%  = 
  45. initialise_wimp("FasterPC Config")
  46.   number_of_hdiscs% = 0
  47.   number_of_fdiscs% = 0
  48.  "ADFS_Drives" 
  49.  ,num_fdrives%
  50.  "OS_Byte",&81,0,&FF 
  51.  ,ROV%
  52.  ROV%>&A3 
  53. )1    
  54. open_template("<Config$Dir>.Templates2")
  55. +1    
  56. open_template("<Config$Dir>.Templates1")
  57. -(  config% = 
  58. load_template("config")
  59. close_template
  60. setup_floppy_disks
  61. setup_hard_disks
  62.   wimp_block%!0  = config%
  63. 22  wimp_block%!4  = 100  : wimp_block%!8  = 300
  64. 32  wimp_block%!12 = 1000 : wimp_block%!16 = 900
  65. 40  wimp_block%!20 = 0    : wimp_block%!24 = 0
  66.   wimp_block%!28 = -1
  67.  "Wimp_OpenWindow",,wimp_block%
  68. setup_hard_disks
  69. icon_string_set(config%,5,
  70. read_var_set_drv("FPC$Drive_C",buffer%))
  71. read_size(1)
  72. icon_string_set(config%,6,
  73. read_var_set_drv("FPC$Drive_D",buffer%))
  74. read_size(2)
  75. icon_string_set(config%,7,
  76. read_var_set_drv("FPC$Drive_E",buffer%))
  77. read_size(3)
  78. icon_string_set(config%,8,
  79. read_var_set_drv("FPC$Drive_F",buffer%))
  80. read_size(4)
  81. icon_string_set(config%,52,
  82. (number_of_hdiscs%))
  83.  number_of_hdiscs% > 0 
  84. E(    
  85.  index% = 1 
  86.  number_of_hdiscs%
  87. F#      
  88.  number_of_fdiscs% > 2 
  89. GV        
  90. icon_string_set(config%,18 + index%,
  91. ("B")+index%+number_of_fdiscs%-2))
  92.       
  93. IB        
  94. icon_string_set(config%,18 + index%,
  95. ("B")+index%))
  96.       
  97. K/      
  98. ungrey_out_icon(config%,00 + index%)
  99. L/      
  100. ungrey_out_icon(config%,08 + index%)
  101. M/      
  102. ungrey_out_icon(config%,14 + index%)
  103. N/      
  104. ungrey_out_icon(config%,18 + index%)
  105. O        
  106.  number_of_hdiscs% < 4 
  107. S,    
  108.  index% = number_of_hdiscs% + 1 
  109. T-      
  110. grey_out_icon(config%,00 + index%)
  111. U-      
  112. grey_out_icon(config%,08 + index%)
  113. V-      
  114. grey_out_icon(config%,14 + index%)
  115. W-      
  116. grey_out_icon(config%,18 + index%)
  117. X        
  118. setup_floppy_disks
  119. ]G  floppy_drives$=
  120. read_variable("FPC$Floppies",buffer%)+"XXXXX",5)
  121.  index% = 1 
  122. `G    
  123. floppy_drives$,index%,1) = "X") 
  124.  (index% > num_fdrives%) 
  125. a-      
  126. grey_out_icon(config%,30 + index%)
  127. b-      
  128. grey_out_icon(config%,34 + index%)
  129. c-      
  130. grey_out_icon(config%,38 + index%)
  131. d-      
  132. grey_out_icon(config%,42 + index%)
  133. e        
  134. f-      
  135. floppy_drives$,index%,1) = "3" 
  136. g.        
  137.  Set up icon for 3
  138. " drive option
  139. h-        
  140. select_icon(config%,34 + index%)
  141. i/        
  142. unselect_icon(config%,38 + index%)
  143.       
  144. k.        
  145.  Set up icon for 5
  146. " drive option
  147. l/        
  148. unselect_icon(config%,34 + index%)
  149. m-        
  150. select_icon(config%,38 + index%)
  151.       
  152. o/      
  153. ungrey_out_icon(config%,30 + index%)
  154. p/      
  155. ungrey_out_icon(config%,34 + index%)
  156. q/      
  157. ungrey_out_icon(config%,38 + index%)
  158. r/      
  159. ungrey_out_icon(config%,42 + index%)
  160. s$      number_of_fdiscs% = index%
  161. t        
  162. icon_string_set(config%,48,
  163. (number_of_fdiscs%))
  164. receive_message(message%)
  165.  message% 
  166. |'    
  167.  quit%         : finished% = 
  168. }$    
  169.  data_load%    : 
  170. data_load
  171. ~+    
  172.  task_init%    : 
  173. check_fpc_config
  174. '    
  175.  config_abort% : finished% = 
  176. mouse_click(click%)
  177.  click% 
  178.  select_button :
  179.       
  180.  wimp_block%!16 
  181. 4        
  182.  1,2,3,4 : 
  183. create_disc(wimp_block%!16)
  184. /        
  185.  52 : 
  186. change_number_of_hdiscs(+1)
  187.         
  188.  14 : 
  189. save_setup
  190.         
  191.  29 : 
  192. set_setup
  193. /        
  194.  48 : 
  195. change_number_of_fdiscs(+1)
  196.       
  197.  adjust_button :
  198.       
  199.  wimp_block%!16 
  200. /        
  201.  52 : 
  202. change_number_of_hdiscs(-1)
  203.         
  204.  14 : 
  205. save_setup
  206.         
  207.  29 : 
  208. set_setup
  209. /        
  210.  48 : 
  211. change_number_of_fdiscs(-1)
  212. H        
  213.  35,36,37,38,39,40,41,42 : 
  214. check_radio_bug(wimp_block%!16)
  215.       
  216. key_press(icon%,key%)
  217.  key% 
  218. #    
  219.  5, 6, 7, 8 : 
  220.  move caret
  221. %    
  222.  "Wimp_ProcessKey",key%
  223. initialise_wimp(app_name$)
  224.  task_id%,version%
  225.  wimp_block% 512,data_block% 64
  226.  "Wimp_Initialise",200,&4B534154,app_name$ 
  227.  version%,task_id%
  228. !  application$    = app_name$
  229.   wimp_mask%      = 1
  230.   adjust_button   = 1
  231.   select_button   = 4
  232.   data_load%      = 3
  233.   task_init%      = &400C2
  234.   config_change%  = &8247E
  235.   config_abort%   = &8247F
  236.   quit%           = 0
  237. =task_id%
  238. closedown_wimp(task_id%)
  239.  "Wimp_CloseDown",task_id%,&4B534154
  240. open_template(file$)
  241.  icon_space% 4096, template% 3072
  242. *  icon_space_end% = icon_space% + 4096
  243.  "Wimp_OpenTemplate",,file$
  244. load_template(name$)
  245.  handle%
  246.  "Wimp_LoadTemplate",,template%,icon_space%,icon_space_end%,-1,name$,0 
  247.  ,,icon_space%
  248.  "Wimp_CreateWindow",,template% 
  249.  handle%
  250. =handle%
  251. close_template
  252.  "Wimp_CloseTemplate"
  253. icon_string_set(window%,icon%,text$)
  254.   !data_block%  = window%
  255.   data_block%!4 = icon%
  256.  "Wimp_GetIconState",,data_block%
  257. )  $(!(data_block%+28)) = text$ + 
  258.   data_block%!8 = 0
  259.   data_block%!12 = 0
  260.  "Wimp_SetIconState",,data_block%
  261. error
  262.   !wimp_block%     = 
  263. I  $(wimp_block%+4) = 
  264. $ + " (internal error code " + 
  265. ) + ")" +
  266.  "Wimp_ReportError",wimp_block%,3,application$ 
  267.  ,result%
  268.  result% = 2 
  269. closedown_wimp(task_id%) : 
  270. icon_sprite_set(window%,icon%,text$)
  271.   !data_block%  = window%
  272.   data_block%!4 = icon%
  273.  "Wimp_GetIconState",,data_block%
  274. &  $(data_block%+20) = text$ + 
  275.   data_block%!8  = 0
  276.   data_block%!12 = 0
  277.  "Wimp_SetIconState",,data_block%
  278. get_string(pointer%)
  279.  (?pointer% > 31)
  280.      a$       += 
  281. (?pointer%)
  282.     pointer% += 1
  283. send_config_change_message
  284.   wimp_block%!0  = 20
  285.   wimp_block%!12 = 0
  286. %  wimp_block%!16 = config_change%
  287.  "Wimp_SendMessage",17,wimp_block%,0
  288. ok(message$)
  289.   !wimp_block%     = 0
  290. (  $(wimp_block%+4) = message$ + 
  291.  "Wimp_ReportError",wimp_block%,1,application$
  292. icon_string_get(window%,icon%)
  293.   !data_block%  = window%
  294.   data_block%!4 = icon%
  295.  "Wimp_GetIconState",,data_block%
  296. get_string(!(data_block%+28))
  297. get_icon_for_esg(window%,esg%)
  298.  "Wimp_WhichIcon",window%,data_block%,&003F0000,&00200000+(esg%<<16)
  299. =!data_block%
  300. data_load
  301.  wimp_block%!24 
  302.  5, 6, 7, 8 :
  303. #      
  304.  wimp_block%!40 = &FC8 
  305. P        
  306. icon_string_set(config%,wimp_block%!24,
  307. get_string(wimp_block%+44))
  308. ,        
  309. read_size((wimp_block%!24) - 4)
  310.       
  311. >        
  312. ok("Dragged file not of DOSDisc filetype (&FC8)")
  313.       
  314. change_number_of_hdiscs(by%)
  315. :  number_of_hdiscs%  = 
  316. icon_string_get(config%,52))
  317.   number_of_hdiscs% += by%
  318.  number_of_hdiscs% < 0 
  319.  number_of_hdiscs% = 0:by% = 0
  320.  number_of_hdiscs% > 4 
  321.  number_of_hdiscs% = 4:by% = 0
  322.  by% = 1 
  323. 9    
  324. icon_string_set(config%,52,
  325. (number_of_hdiscs%))
  326. 8    
  327. ungrey_out_icon(config%,00 + number_of_hdiscs%)
  328. 8    
  329. ungrey_out_icon(config%,08 + number_of_hdiscs%)
  330. 8    
  331. ungrey_out_icon(config%,14 + number_of_hdiscs%)
  332. 8    
  333. ungrey_out_icon(config%,18 + number_of_hdiscs%)
  334. =    
  335.  Offer standard name if file/path text icon is empty
  336. <    
  337. icon_string_get(config%,4+number_of_hdiscs%)="" 
  338. i      
  339. icon_string_set(config%,4+number_of_hdiscs%,"ADFS::4.$.PC.Drive_"+
  340. ("B")+number_of_hdiscs%))
  341.         
  342.  by% = -1 
  343. ;      
  344. icon_string_set(config%,52,
  345. (number_of_hdiscs%))
  346. <      
  347. grey_out_icon(config%,00 + number_of_hdiscs% + 1)
  348. <      
  349. grey_out_icon(config%,08 + number_of_hdiscs% + 1)
  350. <      
  351. grey_out_icon(config%,14 + number_of_hdiscs% + 1)
  352. <      
  353. grey_out_icon(config%,18 + number_of_hdiscs% + 1)
  354.          
  355. change_number_of_fdiscs(by%)
  356. %:  number_of_fdiscs%  = 
  357. icon_string_get(config%,48))
  358. &:  number_of_hdiscs%  = 
  359. icon_string_get(config%,52))
  360.   number_of_fdiscs% += by%
  361.  number_of_fdiscs% < 0 
  362.  number_of_fdiscs% = 0:by% = 0
  363.  number_of_fdiscs% > num_fdrives% 
  364.  number_of_fdiscs% = num_fdrives%:by% = 0
  365.  by% = 1 
  366. ,9    
  367. icon_string_set(config%,48,
  368. (number_of_fdiscs%))
  369. -8    
  370. ungrey_out_icon(config%,30 + number_of_fdiscs%)
  371. .8    
  372. ungrey_out_icon(config%,34 + number_of_fdiscs%)
  373. /8    
  374. ungrey_out_icon(config%,38 + number_of_fdiscs%)
  375. 08    
  376. ungrey_out_icon(config%,42 + number_of_fdiscs%)
  377. 1=    
  378.  (number_of_fdiscs% > 2) 
  379.  (number_of_hdiscs% > 0) 
  380. 2*      
  381.  index% = 1 
  382.  number_of_hdiscs%
  383. 3V        
  384. icon_string_set(config%,18 + index%,
  385. ("B")+index%+number_of_fdiscs%-2))
  386.       
  387. 5        
  388.  by% = -1 
  389. 8;      
  390. icon_string_set(config%,48,
  391. (number_of_fdiscs%))
  392. 9<      
  393. grey_out_icon(config%,30 + number_of_fdiscs% + 1)
  394. :<      
  395. grey_out_icon(config%,34 + number_of_fdiscs% + 1)
  396. ;<      
  397. grey_out_icon(config%,38 + number_of_fdiscs% + 1)
  398. <<      
  399. grey_out_icon(config%,42 + number_of_fdiscs% + 1)
  400. =?      
  401.  (number_of_fdiscs% > 1) 
  402.  (number_of_hdiscs% > 0) 
  403. >,        
  404.  index% = 1 
  405.  number_of_hdiscs%
  406. ?X          
  407. icon_string_set(config%,18 + index%,
  408. ("B")+index%+number_of_fdiscs%-2))
  409.         
  410.       
  411. B        
  412. grey_out_icon(window%,icon%)
  413.   data_block%!0 = window%
  414.   data_block%!4 = icon%
  415.  "Wimp_GetIconState",,data_block%
  416.   data_block%!8 = &00400000
  417. K   data_block%!12 = &00400000
  418.  "Wimp_SetIconState",,data_block%
  419. ungrey_out_icon(window%,icon%)
  420.   data_block%!0 = window%
  421.   data_block%!4 = icon%
  422.  "Wimp_GetIconState",,data_block%
  423.   data_block%!8 = 0
  424. T   data_block%!12 = &00400000
  425.  "Wimp_SetIconState",,data_block%
  426. select_icon(window%,icon%)
  427.   data_block%!0 = window%
  428.   data_block%!4 = icon%
  429.  "Wimp_GetIconState",,data_block%
  430.   data_block%!8 = &00200000
  431. ]   data_block%!12 = &00200000
  432.  "Wimp_SetIconState",,data_block%
  433. unselect_icon(window%,icon%)
  434.   data_block%!0 = window%
  435.   data_block%!4 = icon%
  436.  "Wimp_GetIconState",,data_block%
  437.   data_block%!8 = 0
  438. f   data_block%!12 = &00200000
  439.  "Wimp_SetIconState",,data_block%
  440. set_setup
  441. valid_settings 
  442. l;    number_of_hdiscs% = 
  443. icon_string_get(config%,52))
  444. m!    
  445.  number_of_hdiscs% > 0 
  446. n)      
  447.  loop% = 1 
  448.  number_of_hdiscs%
  449. oS        
  450. ("Set FPC$Drive_"+
  451. "B"+loop%)+" "+
  452. icon_string_get(config%,loop%+4))
  453.       
  454.  loop%
  455. q        
  456. r!    
  457.  number_of_hdiscs% < 4 
  458. s+      
  459.  loop% = number_of_hdiscs%+1 
  460. t/        
  461. ("Unset FPC$Drive_"+
  462. "B"+loop%))
  463.       
  464.  loop%
  465. v        
  466. x;    number_of_fdiscs% = 
  467. icon_string_get(config%,48))
  468.     floppy_drives$ = "XXXX"
  469. z!    
  470.  number_of_fdiscs% > 0 
  471. {/      
  472.  loop% = number_of_fdiscs% 
  473. |?        
  474. get_icon_for_esg(config%,1+loop%) = 34 + loop% 
  475. }3          floppy_drives$ = "3" + floppy_drives$
  476.         
  477. 3          floppy_drives$ = "5" + floppy_drives$
  478.         
  479.       
  480.  loop%
  481.         
  482. 1    
  483. ("Set FPC$Floppies "+
  484. floppy_drives$,4))
  485. #    
  486. send_config_change_message
  487. save_setup
  488. valid_settings 
  489. 6    handle% = 
  490. ("<Config$Dir>.^.Resources.Drives")
  491. 2    
  492. #handle%,"| FasterPC drive configuration"
  493. ;    number_of_hdiscs% = 
  494. icon_string_get(config%,52))
  495. !    
  496.  number_of_hdiscs% > 0 
  497. )      
  498.  loop% = 1 
  499.  number_of_hdiscs%
  500. Z        
  501. #handle%,"Set FPC$Drive_"+
  502. "B"+loop%)+" "+
  503. icon_string_get(config%,loop%+4)
  504.       
  505.  loop%
  506.         
  507. !    
  508.  number_of_hdiscs% < 4 
  509. +      
  510.  loop% = number_of_hdiscs%+1 
  511. 6        
  512. #handle%,"Unset FPC$Drive_"+
  513. "B"+loop%)
  514.       
  515.  loop%
  516.         
  517. ;    number_of_fdiscs% = 
  518. icon_string_get(config%,48))
  519.     floppy_drives$ = "XXXX"
  520. !    
  521.  number_of_fdiscs% > 0 
  522. .      
  523.  loop% = number_of_fdiscs% 
  524. ?        
  525. get_icon_for_esg(config%,1+loop%) = 34 + loop% 
  526. 3          floppy_drives$ = "3" + floppy_drives$
  527.         
  528. 3          floppy_drives$ = "5" + floppy_drives$
  529.         
  530.       
  531.  loop%
  532.         
  533. 8    
  534. #handle%,"Set FPC$Floppies "+
  535. floppy_drives$,4)
  536. #handle%
  537. 9    
  538. ("Settype <Config$Dir>.^.Resources.Drives Obey")
  539. ,    
  540. ("<Config$Dir>.^.Resources.Drives")
  541. #    
  542. send_config_change_message
  543. create_disc(disc%)
  544. /  file$ = 
  545. icon_string_get(config%,disc%+4)
  546.  file$ = "" 
  547. @    
  548. ok("Undefined hard disc file for drive "+
  549. "B"+disc%))
  550. %    
  551. file_not_exist(file$)) 
  552. R      
  553. ok("Drive "+
  554. "B"+disc%)+" hard disc file '"+file$+"' already exists")
  555.         
  556. @      size% = 
  557. icon_string_get(config%,disc%+8))*1024*1024
  558.       
  559.  size% = 0 
  560. Z        
  561. ok("Cannot create hard disc file for drive "+
  562. "B"+disc%)+" with size zero")
  563.       
  564. 3        
  565.  create disc of size integer cylinders
  566. ,        size%=17*4*512*
  567. (size%/4/17/512)
  568. 6        
  569. "XOS_File",11,file$,&FC8,,0,0 
  570.  ; flags%
  571.         
  572.  (flags% 
  573. n          
  574. ok("Error creating hard disc file '"+file$+"' of length "+
  575. (size%)+" for drive "+
  576. "B"+disc%))
  577.         
  578. )          
  579.  fill partition with zeros
  580. !          FHandle% = 
  581. (file$)
  582.           
  583. "Hourglass_On"
  584. 6          
  585. "XOS_Args",3,FHandle%,size% 
  586.  ; flags%
  587.           
  588. "Hourglass_Off"
  589.           
  590.  (flags% 
  591. p            
  592. ok("Error creating hard disc file '"+file$+"' of length "+
  593. (size%)+" for drive "+
  594. "B"+disc%))
  595.           
  596.           
  597. #FHandle%
  598.         
  599.       
  600.         
  601. read_variable(name$,buffer%)
  602.  "XOS_ReadVarVal",name$,buffer%,100,0,0 
  603.  ,,length%
  604.   buffer%?length% = 13
  605. =$(buffer%)
  606. read_size(disc%)
  607. /  disc$ = 
  608. icon_string_get(config%,disc%+4)
  609.  "XOS_File",13,disc$ 
  610.  type%,,,,length% ; flags%
  611.  (type% = 0) 
  612.  (flags% 
  613. -    
  614. icon_string_set(config%,disc%+8,"0")
  615. H    
  616. icon_string_set(config%,disc%+8,
  617. ((length% 
  618.  (1024*1024)) + 1))
  619. read_var_set_drv(name$,buffer%)
  620. *  drive$=
  621. read_variable(name$,buffer%)
  622.  drive$ <> "" 
  623.     number_of_hdiscs% += 1
  624. =drive$
  625. check_fpc_config
  626. get_string(wimp_block%+28) = application$ 
  627. %    
  628.  wimp_block%!4 <> task_id% 
  629.       wimp_block%!0  = 20
  630.       wimp_block%!12 = 0
  631.        wimp_block%!16 = quit%
  632. <      
  633.  "Wimp_SendMessage",17,wimp_block%,wimp_block%!4
  634.         
  635. valid_settings
  636.   no_error_found% = 
  637.  number_of_hdiscs% > 0 
  638. '    
  639.  loop% = 1 
  640.  number_of_hdiscs%
  641. 3      file$ = 
  642. icon_string_get(config%,loop%+4)
  643.       
  644.  file$ = "" 
  645. D        
  646. ok("Undefined hard disc file for drive "+
  647. "B"+loop%))
  648.         no_error_found% = 
  649.       
  650. &        
  651. file_not_exist(file$) 
  652. T          
  653. ok("Drive "+
  654. "B"+loop%)+" hard disc file '"+file$+"' not readable")
  655. !          no_error_found% = 
  656.         
  657.           
  658. read_size(loop%)
  659.         
  660.       
  661.  loop%
  662. =no_error_found%
  663. file_not_exist(file$)
  664.  "XOS_File",13,file$ 
  665.  type%,,,,,attrib%
  666.  (type% <> 1) 
  667.  (type% <> 3) 
  668.     res% = 
  669.  attrib% 
  670.       res% = 
  671.         
  672.       res% = 
  673.         
  674.     =res%
  675. check_radio_bug(icon%)
  676.  esg%
  677.  icon% > 38
  678.     esg% = icon% - 37
  679.     esg% = icon% - 33
  680.  "Wimp_WhichIcon",config%,data_block%,&003F0000,&00200000+(esg%<<16)
  681.  !data_block% = -1 
  682. H    
  683.  No radio buttons selected, so select the one just adjusted out
  684. #    
  685. select_icon(config%,icon%)
  686.